package shujia.day13;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/*
    IO流：
        根据流向划分：
            输入流
            输出流
        根据种类划分：
            字节流【万能流】：
                字节输出流：OutputStream
                            - FileOutputStream
                字节输入流：InputStream
                            - FileInputSteam
            字符流=字节流+编码表：
                字符输出流
                字符输入流



  FileInputStream(File file) 通过打开与实际文件的连接创建一个 FileInputStream ，该文件由文件系统中的 File对象 file命名。
  FileInputStream(String name) 通过打开与实际文件的连接来创建一个 FileInputStream ，该文件由文件系统中的路径名 name命名。

  对于读取数据而言，要求，目标路径一定要存在

  字节输入流读取数据的方式：
    public int read() 一次读取一个字节
    public int read(byte[] b) 一次读取一个字节数组


 */
public class FileInputStreamDemo1 {
    public static void main(String[] args) {
        FileInputStream fis = null;
        try{
            //FileInputStream(File file)
//            File file = new File("src/shujia/day13/a2.txt");
//            fis = new FileInputStream(file);

            //FileInputStream(String name)
            fis = new FileInputStream("src/shujia/day13/a1.txt");

//            System.out.print((char) fis.read());
//            System.out.print((char) fis.read());
//            System.out.print((char) fis.read());
//            System.out.print((char) fis.read());
//            System.out.print((char) fis.read());
//            System.out.print((char) fis.read());

            // 使用while循环读取字节
            // 通过api发现，FileInputStream读取到文件末尾的时候返回-1
//            int i = 0;
//            while ((i = fis.read())!=-1){
//                System.out.print((char) i);
//            }

            //public int read(byte[] b)
//            byte[] bytes = new byte[2];
//            int length = fis.read(bytes); //返回实际读取到的字节数，读取到的数据在字节数组中
//            String s = new String(bytes, 0, length);
//            System.out.print(s);
//
//            int length2 = fis.read(bytes); //返回实际读取到的字节数，读取到的数据在字节数组中
//            String s2 = new String(bytes, 0, length2);
//            System.out.print(s2);
            byte[] bytes = new byte[1024]; // 字节数组大小，一般来说，是1024的倍数
            int length = 0;
            while ((length = fis.read(bytes))!=-1){
                String s2 = new String(bytes, 0, length);
                System.out.print(s2);
            }


        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(fis!=null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
